在我們的生活中,有許多重要的事情需要我們時常檢討和改進,這個過程被稱為斷捨離,不僅適用於程式碼,也適用於我們的人生。
在寫許多行程式碼來實現不同的功能,有時候這些程式碼變得非常複雜難以理解,就像一個亂掉的房間一樣,這時候該斷捨離的像是
if (a > 10 && (b === 'foo' || c < 5) && (d !== 'bar' || e > 20)) {
// ...
}
function processUserData(username, email, age, address, phone, interests) {
// 非常長的函數內容...
}
if (statusCode === 20100) {
// ...
}
function processALotOfTempValue () {
let temp1, temp2, temp3, temp4, temp5, result;
// ...
return result;
}
function addNumbers(num1, num2) {
// 檢查是否為數字
if (typeof num1 !== 'number' || typeof num2 !== 'number') {
return "請輸入有效的數字";
} else {
// 兩個數字相加
var result = num1 + num2;
return result;
}
}
程式的斷捨離會是一個重構的過程,重構讓程式碼變得更加簡潔、容易閱讀和維護,就像整理混亂的房間,第一步就是將不必要的部分丟棄,重新組織與排放,使一切井然有序。
不僅程式碼需要斷捨離,我們的生活也需要,被填滿了的時間表有時候會造成過度壓力,無法應對生活中的挑戰,這也需要人生的斷捨離的時候。
斷捨離是一個檢討和簡化我們生活的過程,藉由檢討目標和價值觀,看看哪些是真正重要的,哪些是可以放下的。
以剛剛最後一個例子來說,有看出問題在哪邊嗎?
function addNumbers(num1, num2) {
// 檢查是否為數字
if (typeof num1 !== 'number' || typeof num2 !== 'number') {
return "請輸入有效的數字";
} else {
// 兩個數字相加
var result = num1 + num2;
return result;
}
}
該減少的是過多的型別檢查,名稱就是 addNumbers
還傳其他參數進去是天兵? JavaScript 會轉型並不會產生程式錯誤回傳錯誤值跟 請輸入有效的數字
有個 87% 像,else 的 block 是一定會被執行的也不需要多包一層。
function addNumbers(num1, num2) {
// 兩個數字相加
return num1 + num2;
}
不管在什麼層面,要避免過度和極端,過度的追求會導致不平衡和不和諧,過多的欲望可能導致內心的不穩定和不滿足,當減少欲望,更可以獲得內在的平靜和滿足感。
其中有個水的比喻很好,水能夠適應不同的形狀,不爭鬥也不過於強硬,即使不強硬但卻也可以鑿穿石頭。
YAGNI(You Aren't Gonna Need It)是一個在軟體開發中的設計原則,它強調在開發過程中不要添加不必要的功能或程式碼。
對於人生來說,我們通常只需要一條牙膏跟一隻牙刷,如果依照每層樓去擺放一樣的物品一個家裡面就會擁有好幾組,但我們其實只需要一組不是嗎?
整理東西的時候,我們就要先把同一類的東西先集中,就像我就有好多無線耳機跟喇叭,學校宿舍、工作租屋、辦公室、浴室、運動,但搬回家之後就多了許多沒用到的。
從道德經的觀點來看,YAGNI 可以被解釋為一個實踐節制和簡單的原則,符合道教哲學中強調的中庸之道和適度的概念。
YAGNI 提醒我們不要過於追求完美或添加過多的物品,而應該保持簡單和精簡,並且適時去反省只關注當下需求好好解決即可,不需要為了未來的可能增加多餘的東西。
addNumbers
這個例子值得深入探討,撰寫方式應該要基於使用情境而定。
正如你所指出的,由於 JavaScript 會進行型別轉換,因此即使 num1
和 num2
不是數字,它們直接相加也不會引發錯誤,但可能會得到非預期的結果。例如,輸入 "5" 與 "10" 相加的結果將是 "510",而且是字串不是數字。
您說的沒錯需要基於使用情境而定,我的感覺是不需要過度為了之後可能發生的事情做防呆跟架構。